-----------------review------------------

1.基础语法
    1.变量
            1.标识符的组成规则
                1.由字母，数字，下划线，美元符号$
                2.不能使用数字开头
                3.不能使用关键字和保留字
                4.建议使用驼峰式命名
                #尽力具有实际意义、不要用下划线开头（DOM有一下下划线开头的全局变量）
            2.变量声明的方式

                1.var
                    var kay;//只声明未赋值
                    var key=10;//声明并赋值
                    var key1=10,key2=20//同时声明多个变量并赋值
                    kay=val1 //赋值并声明

                2.let（es6）
                    1.使用let声明的变量只在当前作用域块内有效（局部变量）
                    2.不能使用let重复声明，不在同一作用快内可以重复声明
                    
                                2 let a=10;
                                3 console.log(a);
                                4
                                5 function say(){
                                6     let b=20;
                                7     console.log("b:",b)
                                8     console.log("a:",a)
                                9 }
                                10 say();
                                11 console.log(a);
                                12 //console.log(b);局部变量 外部打印显示未定义*/

                    3.使用let声明的变量不能解析提升
                            console.log(a);
                            var a=10;//undefined
                            let a=10;//error
                            
                            测试：
                                let a=10;
                                let b=20;
                                    a已经被定义了 Identifier 'a' has already been declared
                                var a=10;
                                let a=20;
                                    a已经被定义了 Identifier 'a' has already been declared
                                let a=10;
                                var a=20;
                                    a已经被定义了 Identifier 'a' has already been declared
                3.const（es6）
                    1.使用const声明的变量只在当前作用域内有效
                    2.使用const声明一个常量，一旦声明变量值不可以修改
                    3.如果属性值为一种引用数据类型，值的引用地址不变的情况下，可以修改内容

    2.注释
    3.语句：每个语句用分号结尾

2.使用
    1.node
        repl
        node命令
    2.html
        1.内嵌式<script></script>可以放在html的任何地方，但建议放在head当中
        2.外部引入 outer.js
            <script src=""> 使用了src的script标签里的js内容会被解析器忽略</script>
3.局部变量和全局变量
    使用了var操作符并且声明在声明在函数中——>局部变量
    使用let和const 局部变量
-----------------review------------------

数据类型

    typeof（a）
    typeof a;
        return:返回值为当前变量的数据类型
    typeof typeof a；
        返回值的数据类型
    1.五种基本数据类型
        undefined 未定义数据类型
            值 / 数据类型
                1.var a;
                2.var a=undefined;
                3.既没有声明也没有赋值的变量 
        null 空引用数据类型
            即将指向以恶个二引用数据类型，但此时未指向
            var a=null;
            null的返回值是object
            object的返回值还是object
            ****——>undefined派生至null
                    null==undefined:true 
        Boolean
            true/false
        string
            所有加了双引号或者单引号的就为string类型
            var a="null";
            var a="undefined";
            var a="hello";
            var a="20";
            var a='10';

            ### json:json字符串（里面放的是对象）
              json字符串{
                  "name":"list";
                  "age":12;
              }
            ''
            字符串的拼接
        number
            所有数值类型均为均为number数值
            var a=10;
            var b=10.3;
            var c=0xa;
            var d=010;

            var a="hello"/5  //NaN
            NaN: No A Number
            isNaN(a) 当前a变量是不是 不是一个数 
                    是数 false 不是数 true
                #对于number返回false
                #对于非number返回true
            infinity:无穷
                var a=10/0 正无穷
                var a=-10/0 负无穷
            isFinite（a）
                返回a变量是否不是无穷大的数
                #true：不是一个无穷数
                #false：是一个无穷数（无穷数+NaN）
    2.一种引用数据类型
              object:对象类型
                    属性/方法：
                    1.constructor：构造者
                    2.toString（）：将实例对象转化为字符串
                    3.valueof（）：将实例的对象值打印
                        student——
                        function——
                new构建：var student = new Object();
                    student:实例对象
                    student.name="tom";
                    student.age=20;
                字面量声明： var stu2 ={
                    name:'terry',
                    age:'20';
                    gender:'man'
                }
                function函数（object——>function）
                array数组
                math
                date
                ... 

值传递和引用数据传递
注意：
    var a=10;
    a=b;（从右向左赋值）
    console.log(b)
基本数据类型：在进行了值传递的时候，只是复制了一份属性值进行操作
    var a=10;
    b=a;
    b=b+1;
    console.log(a);//10
    console.log(b);//11
引用数据类型进行值传递的时候，转递的是引用地址
    var o={
        name:"lisi",
        age:20;
    }

    o1=o2(错)
    o2=o1;(此时赋值的是地址)
    o2.name="terry"
    console.log(o1.name);
    console.log(o2.name);

4.操作符
    算术运算符：
        + +=
          +：a+b
            1.a和b皆为number类型 直接计算

            2.a和b只要其中一个number类型，并且不是object或者string类型
            将当前变量转化为number类型进行计算

            3.只要其中有一个变量为string类型，另一个变量就转化成string类型
            进行字符串拼接(如果为object类型，默认调用toString)
            
            4.只要其中一个变量为object类型，另一个不是string类型，
            需要不为string的数据进行number转化，然后调用object中
            的valueof和toString进行计算
                a.默认调用toString()
                b.当只重写toString(),调用toString()
                c.当只重写valueOf(),调用valueOf()
                d.当重写toString()又重写valueOf()，调用valueOf()
          +=：a+=b ——>a=a+b

          - -=
 
          * *=

          / /=
 
          % %=
        

    比较运算符:返回值为一个Boolean类型
        >
        < 
        >=
        <=
        ==：相等比较
            a==b:ab均为number值——>直接对比
                 ab不是number的时候——>转化为number
                 ab为string——>字符编码
                 ab为object 比较引用地址
                 null==undefined true
                 stu1==stu2
                 var=stu1
                 var=stu2
        ===：全等比较
        只进行比较，不进行数据类型转化
        只要数据类型不同，就不等
        null===undefined //false 

        a>b:如果a和b不是number类型，
        a,b转化为number类型之后在比较

        如果两个变量都是字符串类型，比较字符编码ASCII码

    逻辑运算符
        
        逻辑与 &&
            a&&b 同真为真 有假则假
            如果第一个操作数是null/undefined/""/0/NaN/false返回第一个操作数
            如果第一个操作数是其他，则返回第二个数
        逻辑或 ||
            a||b 有真则真 同假才假
            如果第一个操作数是null/undefined/""/0/NaN/false返回第二个操作数
            如果第一个操作数是其他，则返回第一个数
        逻辑非 ！
            直接取反
            !a:将a变量转化为boolean值，再取反
    三目运算符
    一元运算符
    位运算符